জাভাস্ক্রিপ্টে অবজেক্ট রেফারেন্স হলো এমন একটি ধারণা, যেখানে এক অবজেক্টের পংক্তি বা মানকে আরেকটি ভেরিয়েবলে ধারণ করা হয়, কিন্তু মূল অবজেক্টের কপি তৈরি হয় না। এর পরিবর্তে, একাধিক ভেরিয়েবল একে অপরকে রেফারেন্স করে থাকে একই অবজেক্টকে। অর্থাৎ, আপনি যখন একটি অবজেক্ট এক ভেরিয়েবলে সংরক্ষণ করেন এবং তারপর আরেকটি ভেরিয়েবলে সেটি অ্যাসাইন করেন, তখন এই দুটি ভেরিয়েবল একই অবজেক্টের রেফারেন্স শেয়ার করে।
এটি একটি প্রাইমিটিভ ভ্যালু (primitive value) থেকে আলাদা, কারণ প্রাইমিটিভ ভ্যালু গুলো সরাসরি ভেরিয়েবলের মধ্যে সংরক্ষিত হয়, কিন্তু অবজেক্টের ক্ষেত্রে এটি রেফারেন্স বা পয়েন্টার হিসেবে কাজ করে।
let person1 = { name: "Alice", age: 25 };
let person2 = person1; // person1-এর রেফারেন্স person2-এ অ্যাসাইন করা
console.log(person1 === person2); // আউটপুট: true
এখানে, person2
আসলে person1
এর রেফারেন্স শেয়ার করছে, তাই person1
এবং person2
একই অবজেক্টকে রেফারেন্স করছে। এর ফলে, person1
বা person2
এ কোনো পরিবর্তন করলে তা অন্যটিতে প্রভাব ফেলবে।
let person1 = { name: "Alice", age: 25 };
let person2 = person1; // person1-এর রেফারেন্স person2-এ অ্যাসাইন করা
person2.age = 30; // person2 এর age পরিবর্তন করা
console.log(person1.age); // আউটপুট: 30, কারণ person1 এবং person2 একই অবজেক্ট রেফারেন্স করছে
এখানে, person2
এর age
পরিবর্তন করলে person1
এর age
ও পরিবর্তিত হয়, কারণ উভয় ভেরিয়েবল একই অবজেক্টকে রেফারেন্স করছে।
শ্যালো কপি এবং ডিপ কপি দুটি পদ্ধতি, যেগুলি অবজেক্টের কপি তৈরি করার সময় ব্যবহৃত হয়:
let person1 = { name: "Alice", age: 25 };
let person2 = person1; // শ্যালো কপি, রেফারেন্স কপি হচ্ছে
person2.age = 30;
console.log(person1.age); // আউটপুট: 30, কারণ এটি একই রেফারেন্স
let person1 = { name: "Alice", age: 25 };
let person2 = JSON.parse(JSON.stringify(person1)); // ডিপ কপি
person2.age = 30;
console.log(person1.age); // আউটপুট: 25, কারণ এটি আলাদা কপি
এখানে, JSON.parse(JSON.stringify())
ব্যবহার করে ডিপ কপি তৈরি করা হয়েছে, যা মূল অবজেক্টের কোনো পরিবর্তন কপির ওপর প্রভাব ফেলতে দেয় না।
প্রাইমিটিভ ডেটা টাইপ যেমন স্ট্রিং, নম্বর, বুলিয়ান, সিম্বল, null
বা undefined
এর ক্ষেত্রে ভেরিয়েবলগুলো সরাসরি মান ধারণ করে, তাই কপি করার সময় নতুন ভেরিয়েবলটি মূল ভেরিয়েবলের মানের কপি পায়।
অন্যদিকে, অবজেক্ট এবং অ্যারে (যারা রেফারেন্স টাইপ) কপি করার সময় নতুন ভেরিয়েবলটি পুরনো ভেরিয়েবলের রেফারেন্স কপি করে।
let num1 = 10;
let num2 = num1; // কপি হচ্ছে প্রাইমিটিভ ভ্যালু
num2 = 20;
console.log(num1); // আউটপুট: 10, কারণ এটি আলাদা ভ্যালু কপি হয়েছে
অবজেক্ট রেফারেন্স জাভাস্ক্রিপ্টের একটি গুরুত্বপূর্ণ ধারণা, যেখানে একটি ভেরিয়েবল অন্য ভেরিয়েবলের রেফারেন্স শেয়ার করে। এই কারণে, এক ভেরিয়েবল দিয়ে কোনো অবজেক্ট পরিবর্তন করলে অন্য ভেরিয়েবলও পরিবর্তিত হয়। অবজেক্টের সাথে কাজ করার সময় এটি শ্যালো কপি বা ডিপ কপি কৌশল ব্যবহার করার ক্ষেত্রে গুরুত্বপূর্ণ হয়ে ওঠে, কারণ শ্যালো কপি রেফারেন্স কপি করে, যা দুই ভেরিয়েবলকে একই অবজেক্টের রেফারেন্সে আবদ্ধ করে।
common.read_more